#include <iostream>

#include <cstring>
using namespace std;

template<typename T>
bool lt(T a, T b)
{
  cout<<"primary template"<<endl;
  return a<b;
}

template<typename T>  //because of overloading
bool lt(T* pa, T* pb)//function template partial specialization is not allowed
{
  cout<<"partial specialization"<<endl;
  return true;
}

template<>
bool lt(const char* a, const char* b)
{
  cout<<"complete specialization"<<endl;
  return strcmp(a,b);
}

int main()
{
  int a = 1,b = 2;
  lt(a,b);
  int *pa = &a, *pb = &b;
  lt(pa,pb);
  const char* sa = "haha";
  const char* sb = "hello";
  lt(sa,sb);

  return 0;
}
